package cn.yunhe.toolKits.qrcode;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;

import javax.imageio.ImageIO;

import com.swetake.util.Qrcode;

import jp.sourceforge.qrcode.QRCodeDecoder;
import jp.sourceforge.qrcode.data.QRCodeImage;

public class CreateQrcode {
	
	public static boolean[][] cteateArrayMethod(String messageString){
		//创建二维数组
		boolean[][] arrayBoolean = null;
		//创建二维码生成的对象
		Qrcode qrcode = new Qrcode();
		/**
		   *  设置二维码的参数信息
		 */
		//1 首先是设置容错率 L(7%) M(15%) Q(25%) R(30%)
		qrcode.setQrcodeErrorCorrect('M');
		//2 设置编码格式+
		qrcode.setQrcodeEncodeMode('B');
		//设置版本信息，不同的版本对应的图片的大小不一样
		qrcode.setQrcodeVersion(10);
		//将字符串转换成字节数组
		byte[] messByte = messageString.getBytes();
		//将信息转换成布尔类型的二维数组
		arrayBoolean = qrcode.calQrcode(messByte);
		return arrayBoolean;
	}
	
	public static void createMessagePicture(String message) {
		try {
		//创建图片生成的路径信息
		String pictureMessage = "C:\\Users\\Administrator\\Desktop\\qrcode.jpg";
		//创建文件对象
		File file = new File (pictureMessage);
		//创建信息对象的字符串
		String messageString =message;
		//将其转换成二维数组的信息
		boolean[][] strBooleanArray = cteateArrayMethod(messageString);
		//将信息转换成图片的信息使用BufferedImage对象,由于需要参数，就先设置参数
		int width = 175;//设置背景图片的宽
		int heigh = 175;//设置背景图片的高
		BufferedImage bufferImage = new BufferedImage(width,heigh,1);
		//生成绘制二维码的绘图对象使用Graphics2D对象
		Graphics2D gcs = bufferImage.createGraphics();
		//设置背景图片的颜色
		gcs.setBackground(Color.cyan);
		//设置背景图片的坐标范围
		gcs.fillRect(0, 0, width, heigh);
		//设置二维码的信息
		gcs.setColor(Color.blue);
		//设置偏移量
		int pffex = 2;
		//遍历将二维码的信息写进去,获取二维码的二维数组的长度信息
		int arrayLength = strBooleanArray.length;
		for(int i = 0;i < arrayLength;i ++) {
			for(int j = 0; j < arrayLength;j++) {
				//这个就需要根据二维数组的真假进行绘画
				if(strBooleanArray[i][j]) {
					gcs.fillRect(i*3+pffex, j*3+pffex, 3, 3);
				}
			}
		}
		//将图片创建到对应的位置中去
			ImageIO.write(bufferImage, "jpg",file);
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	public static void main(String[] args) throws Exception {
		try {
	    //首先生成二维码d
		createMessagePicture("nmxd");
		//读取二维码
		File file = new File ("C:\\\\Users\\\\Administrator\\\\Desktop\\\\qrcode.jpg");
		//使用读取图片的类进行读取
		BufferedImage bufferImage =	ImageIO.read(file);
		//使用正确的二维码的读取工具
		QRCodeDecoder qrcode = new QRCodeDecoder ();
		byte[]  strByte = new byte[20000000];
		strByte = qrcode.decode(new MyQRCodeImage(bufferImage));
		String byteStr = new String(strByte,"utf-8");
		System.out.println(byteStr);
		bufferImage.flush();
		} catch (Exception e) {
			e.printStackTrace();
		}
	}
}
